package compilador.lexico;

/**
 * Representação de um token, com tipo e lexema.
 * 
 * @author Carlos H V Pinto
 */
public class Token
{
    private TipoToken tipo;
    private String lexema;

    public Token(TipoToken tipo, String valor)
    {
        this.tipo = tipo;
        this.lexema = valor;
    }

    public TipoToken getTipo()
    {
        return tipo;
    }

    public void setTipo(TipoToken tipo)
    {
        this.tipo = tipo;
    }

    public String getLexema()
    {
        return lexema;
    }

    public void setLexema(String lexema)
    {
        this.lexema = lexema;
    }

    /*
     * Sobreposição do método toString() para mostrarmos as mensagens corretas 
     * no arquivo de saída
     */    
    @Override
    public String toString()
    {
        if (tipo == TipoToken.Identificador)
            return lexema + " - identificador";
        
        if (tipo == TipoToken.CadeiaLiteral)
            return lexema + " - cadeia_literal";
        
        if (tipo == TipoToken.NumeroInteiro)
            return lexema + " - numero_inteiro";
        
        if (tipo == TipoToken.NumeroReal)
            return lexema + " - numero_real";
        
        // Outros tipos de tokens (palavras e simbolos reservados)
        return lexema + " - " + lexema;
    }
}
